home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Power 1997 December
/
MACPOWER-1997-12.ISO.7z
/
MACPOWER-1997-12.ISO
/
AMUG
/
PROGRAMMING
/
Raven 1.2.sit
/
Raven 1.2
/
Source
/
Foundation
/
Common
/
ZLocker.cpp
< prev
next >
Wrap
Text File
|
1996-10-28
|
2KB
|
87 lines
/*
* File: ZLocker.h
* Summary: Stack based class that locks things.
* Written by: Jesse Jones
*
* Copyright ゥ 1996 Jesse Jones.
* For conditions of distribution and use, see copyright notice in ZTypes.h
*
* Change History (most recent first):
*
* <-> 1/14/96 JDJ Created
*/
#include <ZLocker.h>
#include <Memory.h>
#include <ZLockable.h>
//----------------------------------------------------------------
//
// TLocker::~TLocker
//
//----------------------------------------------------------------
TLocker::~TLocker()
{
if (mObject != nil)
mObject->Unlock();
else
HSetState(mHandle, mOldState);
}
//---------------------------------------------------------------
//
// TLocker::TLocker (MBaseLockable, bool)
//
//---------------------------------------------------------------
TLocker::TLocker(const MBaseLockable& object, bool moveHigh) : mObject(const_cast<MBaseLockable*>(&object))
{
mObject->Lock(moveHigh);
mHandle = nil; // Locking an MBaseLockable instead of a toolbox Handle.
}
//---------------------------------------------------------------
//
// TLocker::TLocker (MBaseLockable*, bool)
//
//---------------------------------------------------------------
TLocker::TLocker(const MBaseLockable* object, bool moveHigh)
{
ASSERT(object != nil);
mObject = const_cast<MBaseLockable*>(object);
mObject->Lock(moveHigh);
mHandle = nil; // Locking an MBaseLockable instead of a toolbox Handle.
}
//----------------------------------------------------------------
//
// TLocker::TLocker (Handle, bool)
//
//----------------------------------------------------------------
TLocker::TLocker(Handle hand, bool moveHigh)
{
ASSERT(hand != nil);
ASSERT(*hand != nil);
mHandle = hand;
mOldState = HGetState(mHandle);
if (!(mOldState & 0x0080)) // handle state bit 7 is the "locked" bit
if (moveHigh)
HLockHi(mHandle);
else
HLock(mHandle);
mObject = nil; // Locking a toolbox Handle instead of an MBaseLockable.
}